23

» WarCraft 3 / Перемещение области заклинанием

Похожие вопросы:

ответ
Хозяин Миров, боже
делаем дами ауру
потом всем у кого есть баф ауры даём бонусы скрытым спелбуком
когда баф исчезает убираем бонусы

23

» WarCraft 3 / Триггер -для каждого числа делать ... -

Похожие вопросы:

ответ
Diaboliko, xgm.guru/p/blog-nvc123/101422
это про то как вешать всякую фигню на общий таймер
хэш тут нафиг не нужен т.к. таймер 1
ответ
Перед созданием юнитов записать в переменную случайное число, а после - сделать проверку через If / Then / Else. Если (переменная) = 1, то дать каждому юниту в playarena[integer B] нужный предмет.
ответ
вот стандартный набор функций мили игры в триггере инициализации:
    call MeleeStartingVisibility(  )
    call MeleeStartingHeroLimit(  )
    call MeleeGrantHeroItems(  )
    call MeleeStartingResources(  )
    call MeleeClearExcessUnits(  )
    call MeleeStartingUnits(  )
    call MeleeStartingAI(  )
    call MeleeInitVictoryDefeat(  )
По названиям функций думаю понятно что они делают, рассмотрим по подробнее MeleeInitVictoryDefea( )
function MeleeInitVictoryDefeat takes nothing returns nothing
    local trigger    trig
    local integer    index
    local player     indexPlayer

    // Create a timer window for the "finish soon" timeout period, it has no timer
    // because it is driven by real time (outside of the game state to avoid desyncs)
    set bj_finishSoonTimerDialog = CreateTimerDialog(null)

    // Set a trigger to fire when we receive a "finish soon" game event
    set trig = CreateTrigger()
    call TriggerRegisterGameEvent(trig, EVENT_GAME_TOURNAMENT_FINISH_SOON)
    call TriggerAddAction(trig, function MeleeTriggerTournamentFinishSoon)

    // Set a trigger to fire when we receive a "finish now" game event
    set trig = CreateTrigger()
    call TriggerRegisterGameEvent(trig, EVENT_GAME_TOURNAMENT_FINISH_NOW)
    call TriggerAddAction(trig, function MeleeTriggerTournamentFinishNow)

    // Set up each player's mortality code.
    set index = 0
    loop
        set indexPlayer = Player(index)

        // Make sure this player slot is playing.
        if (GetPlayerSlotState(indexPlayer) == PLAYER_SLOT_STATE_PLAYING) then
            set bj_meleeDefeated[index] = false
            set bj_meleeVictoried[index] = false

            // Create a timer and timer window in case the player is crippled.
            set bj_playerIsCrippled[index] = false
            set bj_playerIsExposed[index] = false
            set bj_crippledTimer[index] = CreateTimer()
            set bj_crippledTimerWindows[index] = CreateTimerDialog(bj_crippledTimer[index])
            call TimerDialogSetTitle(bj_crippledTimerWindows[index], MeleeGetCrippledTimerMessage(indexPlayer))

            // Set a trigger to fire whenever a building is cancelled for this player.
            set trig = CreateTrigger()
            call TriggerRegisterPlayerUnitEvent(trig, indexPlayer, EVENT_PLAYER_UNIT_CONSTRUCT_CANCEL, null)
            call TriggerAddAction(trig, function MeleeTriggerActionConstructCancel)

            // Set a trigger to fire whenever a unit dies for this player.
            set trig = CreateTrigger()
            call TriggerRegisterPlayerUnitEvent(trig, indexPlayer, EVENT_PLAYER_UNIT_DEATH, null)
            call TriggerAddAction(trig, function MeleeTriggerActionUnitDeath)

            // Set a trigger to fire whenever a unit begins construction for this player
            set trig = CreateTrigger()
            call TriggerRegisterPlayerUnitEvent(trig, indexPlayer, EVENT_PLAYER_UNIT_CONSTRUCT_START, null)
            call TriggerAddAction(trig, function MeleeTriggerActionUnitConstructionStart)

            // Set a trigger to fire whenever this player defeats-out
            set trig = CreateTrigger()
            call TriggerRegisterPlayerEvent(trig, indexPlayer, EVENT_PLAYER_DEFEAT)
            call TriggerAddAction(trig, function MeleeTriggerActionPlayerDefeated)

            // Set a trigger to fire whenever this player leaves
            set trig = CreateTrigger()
            call TriggerRegisterPlayerEvent(trig, indexPlayer, EVENT_PLAYER_LEAVE)
            call TriggerAddAction(trig, function MeleeTriggerActionPlayerLeft)

            // Set a trigger to fire whenever this player changes his/her alliances.
            set trig = CreateTrigger()
            call TriggerRegisterPlayerAllianceChange(trig, indexPlayer, ALLIANCE_PASSIVE)
            call TriggerRegisterPlayerStateEvent(trig, indexPlayer, PLAYER_STATE_ALLIED_VICTORY, EQUAL, 1)
            call TriggerAddAction(trig, function MeleeTriggerActionAllianceChange)
        else
            set bj_meleeDefeated[index] = true
            set bj_meleeVictoried[index] = false

            // Handle leave events for observers
            if (IsPlayerObserver(indexPlayer)) then
                // Set a trigger to fire whenever this player leaves
                set trig = CreateTrigger()
                call TriggerRegisterPlayerEvent(trig, indexPlayer, EVENT_PLAYER_LEAVE)
                call TriggerAddAction(trig, function MeleeTriggerActionPlayerLeft)
            endif
        endif

        set index = index + 1
        exitwhen index == bj_MAX_PLAYERS
    endloop

    // Test for victory / defeat at startup, in case the user has already won / lost.
    // Allow for a short time to pass first, so that the map can finish loading.
    call TimerStart(CreateTimer(), 2.0, false, function MeleeTriggerActionAllianceChange)
endfunction
Вроде много, но тут все просто, создается три триггера один следит за тем сколько построил зданий любой играющий игрок, второй следит сколько зданий погибло у любого играющего игрока, ну а третий следит за теми кто ливнул, чтобы их не преребирать, два прочих вспомогательные, следят за отмненой строительства и прочее.
Итого делаем вывод, чтобы узнать проиграл или нет игрок, нам нужно узнать сколько у него живых зданий, меньше 1 игрок проиграл. А реализовать это можно как угодно, триггерами следящими за смертями и прочим или таймером, который будет переодически считать все здания каждого игрока и давать поражение тем игрокам у кого не осталось ни одного здания...

23

» WarCraft 3 / если/то/иначе

Похожие вопросы:

ответ
Это не пробовали?
Или вот это. Хорошая наработка, насколько я помню.
ответ
Поищи у китайцев, у них много чего можно найти, но от их скорости проще застрелится
ответ
Есть логическое условие. Его нахождение в списке не должно доставить проблем.

23

» WarCraft 3 / Ускорение анимации

Похожие вопросы:

ответ
Diaboliko:
В гуи находится в разделе Спецэффекты(одном из них)
Где? В каком редакторе? Редакторе карт? Mdlvis'e?
Ладно, я просто изменил анимацию...
ответ
Bezumny:
Ну меня скорее интересует анимация ускорения, на непонятной мне основе, когда герой бежит его отражение смещается. Я планирую скил, при котором происходит "замедление времени, возможно даже на основе ауры, враги теряют способность магии...хотелось бы чтобы их реген в это время был равен 0....ну а сам герой должен передвигаться с данной анимацией...
У, да это спецэффект который создают раз в n сек в координатах героя и удаляют, так создается эффект шлейфа отражений, а зелень и смазаность - это такая текстура которая висит перед камерой игрока, это все визуализация из области cinematic - спецэффекты для режима театра в варктавте, там много инструментов для создания роликов на движке варкравта, проиграть любую анимацию, с заданной скоростью не проблема...
Чтобы получить шлейф отрежений конкретного юнита, нужна подходящая модель, т.е импорт - в пуджах вроде юзалась модель снаряда иллюзий мастера клинка, хотя это может быть и импорт.
Если хочется чтобы герой двигался как в матрице, тебе лучше заглянуть к модельщикам.

23

» WarCraft 3 / Save/Load

Похожие вопросы:

ответ
Статья по созданию такой системы. Там же простенькая наработка.
ответ
Если в кратце - xgm.guru/p/wc3/data-manager
Если поподробнее - xgm.guru/p/wc3/preexp
ответ
юзай прелоад
подробнее в статьях
ответ
создай проект, распиши что есть, что нужно сделать, пару скринов, свободные вакансии
ответ
Steal nerves:
Мне не нужно сохранять героя, в этом то и проблема, так бы я просто скопировал чужую наработку.
Все, мне помог один очень хороший человек.

23

» WarCraft 3 / Небо

Похожие вопросы:

ответ
darkowlom, точно, я несколько лет назад тоже пробовал эту модель - так же исчезала при определённом AoA.
KaneThaumaturge, посмотри 38 комментарий в этой теме, может быть поможет.
ответ
Громовая поступь > Допустимые цели > добавь воздушные
Чтобы изменить эффект модели урона > графика > цель
ответ
Что-то типа такого.
ответ
Небо - сферическая модель которая движится, а на эту сферу наложена текстура, тестуру можно менять вроде динамически во время игры, но мб багнулся движок и не встала текстура как надо...

23

» WarCraft 3 / Player( 13 ), Player( 14 )

Похожие вопросы:

ответ
Мда. Жасс такой жасс.
Как оказалось если пытатся отобразить уже отображенный МБ - варик его скроет... Отсюда и проблемы пошли.
Решение: Сначала все скрываем, а потом локально отображаем и никак иначе.
У меня косяк был в том, что в периодике мб показывался локально, и периодик срабатывал раньше отображения.
ответ
Эмм что за ерунда, сократил код, убрав всё лишнее, но утечки все равно остаются, по 1.5 - 2 хэндла за каждое нанесение урона (тип хэндла не знаю как посмотреть). Когда триггер отключаешь, то всё нормально.
Сокращенный код
function SDMSCreateTextTag takes nothing returns nothing
    local unit u=GetTriggerUnit()
    local unit s=GetEventDamageSource()
    local integer i=GetConvertedPlayerId(GetOwningPlayer(u))
    local texttag tt=CreateTextTag()
    local real dmg=GetEventDamage()

    if ( dmg > 1.00 ) and ( dmg < 9999.00 ) then
        if GetPlayerId(GetOwningPlayer(u))==12 then
            call SetTextTagText(tt, "|cff9db9eb-"+I2S(R2I(dmg))+"|r", 0.023)
        else
            call SetTextTagText(tt, "|cffffa500-"+I2S(R2I(dmg))+"|r", 0.023)
        endif
        call SetTextTagPosUnit(tt, u, 0)
        call SetTextTagColor(tt, 255, 255, 255, 255) 
        call SetTextTagVelocity(tt, 0.05325*Cos(90 * bj_DEGTORAD), 0.05325*Sin(90 * bj_DEGTORAD))
        call SetTextTagPermanent(tt, false)
        call SetTextTagLifespan(tt, 1.0)
        call SetTextTagFadepoint(tt, 0.0)
    endif
    call PolledWait(2.0)

    call DestroyTextTag(tt)
    set u=null
    set s=null
    set i=0
    set dmg=0
    set tt=null
endfunction

function SDMSTriggerRegisterUnitDamaged takes nothing returns nothing
    call TriggerRegisterUnitEvent(udg_SDMStrigger,GetEnteringUnit(),EVENT_UNIT_DAMAGED)
endfunction

function theSDMSTriggerActions takes nothing returns nothing
    local trigger UnitEnter=CreateTrigger()

    call TriggerRegisterEnterRectSimple(UnitEnter, gg_rct_Arena)
    call TriggerAddAction(UnitEnter,function SDMSTriggerRegisterUnitDamaged)

    set UnitEnter=null
endfunction

function InitTrig_the_SDMS_Trigger takes nothing returns nothing
    local trigger tr=CreateTrigger()

    set udg_SDMStrigger=CreateTrigger()//Тут также меняется название глобальной переменной типа триггер.
    call TriggerAddAction(udg_SDMStrigger,function SDMSCreateTextTag)
    call TriggerRegisterTimerEventSingle(tr,0.0)
    call TriggerAddAction(tr,function theSDMSTriggerActions)

    set tr=null
endfunction
Wait вызывает утечки ((
Пришлось делать через таймер
ответ
Жертвой игрок может стать, потеряв все строения в Melee. Он враждебен всем, но сам не атакует.
Враждебный - обычные нейтралы.
Резерв - игрок, изначально нейтральный, скорее всего нужен для манипуляций с передачей контроля над юнитами.
Все эти игроки находятся под управлением компьютера, так что нормально управлять ими не получится.
(Ну и ты там везде на единичку окарался. Все номера ровно на 1 больше.)

23

» WarCraft 3 / Мемхак

Похожие вопросы:

ответ
че-то действительно, поле вроде бы и отображает активную атаку, но не является её определителем, т.е. менять его бесполезно. ок, тогда пока нет решения на мх
ответ
1 = str, 2 = int, 3 = agi
ответ
Вывод:
-в 2018 году работают только костыли 2011 года для предотвращения использования внутри игровых читов

23

» WarCraft 3 / Ограничение предметов.

Похожие вопросы:

ответ
Steal nerves:
ответы
Как объединить зелья лечения в одно с зарядом, если герой имеет одно в инвентаре и поднимает второе?
обычно используют "событие - юнит получает предмет", И на предмет, который вы получаете, ссылается переменная, которая называется item being manipulated. А юнит, который получает итем - Triggering Unit. Вы можете с помощью этой переменной итема узнать тип, сравнить. Потом циклом пробегаете по слотам (от 1 до 6), тут вся суть в одной команде триггерной (item in slot X, итем в слоте Х) и проверяете есть ли такой же итем (не забываем делать проверки, на то что этот предмет не равен item being manipulated и сравниваете не одинаковые ли типы). Если есть такой же (находите тот же тип что и item being manipulated), то от item being manipulated берете заряды и прибавляете к зарядам существующего, а потом item being manipulated удаляете. Недостаток: при заполненном инвентаре такая штука не будет работать.Не хватает свободного места.
код
цикл А от 1 до 6
if тип итема (item being manipulated) РАВНО тип итема (item in slot А) and item being manipulated НЕ РАВНО item in slot А then проверяете
set k = Charges remaining in ( item being manipulated) + Charges remaining in ( item in slot А) складываете заряды
Set charges remaining in ( item in slot А) to ( k) устанавливаете кол-во зарядов
Remove Item (item being manipulated) удаляете
endif
Есть гуишная проверка на наличие итема определенного типа в инвентаре, но она утечна. И лучше циклом прогонять.
Кстати выше пример, там вот дропают итем, зачем? чтобы проверить есть ли такой же итем. А то мб проверка на наличие итема определенного типа в инвентаре найти подобранный итем. А нам нужно знать, что есть еще один, кроме подобранного. Поэтому дропают. Только не понятно зачем создаете новый итем.
Проверка, на то что подобранный предмет имеет зарядов больше 0, говорит нам о том что это не обычный предмет.
есть статьи
Как зелье с зарядом разделить, если игрок перекладывает зелье с зарядом в другую ячейку инвентаря, если возможно, то разделение происходить должно только при нажатии какой-то клавиши?
можно перекладывать в другой слот. для этого ловят приказ. Короче смотрите системы CCS
там создают новый такой же предмет, и выделяют кол-во зарядов, деля поровну например. Абилкой например, попробуй сделать целевую активную абилку с целью предмет, указывай на инвентарь и дели.
Как это можно сделать покороче для множества разных типов предметов?
всмысле покороче? сделать под одну группу? есть же классификация. Я вот делаю так, что все предметы, которые с зарядами, должны иметь классификацию "с зарядами". Не помню точно как называется класс итемов.
Как правильно реализовать в инвентаре 7 слот?
если у героя заполнен инвентарь, то он может подобрать руну. Вот в доте система скрещивания. То же самое можно сделать и с зарядами. На земле у него лежат руны, при подборе руна исчезает. Но мы проверяем слоты, есть ли такой итем. Если есть, прибавляем заряды к существующему. Иначе создать новый. При дропе итема, оригинал подменяет снова на руну. В руну можно передать значения зарядов.
А также ограничения какие-то на количество зарядов нужно ставить или сама система выше какой-то планки не даст собирать?
до такого не доходил.
скинул примеры (хотя многие дурацкие, но делал здесь хгм в качестве ответов)
вот еще одна система hh
ответ
~8gabriel8:
GingerAlice, перейти на вкладку Способности, открыть Особые->Предметы, там найти "Дух-целитель (предмет)" и поставить своё время.
ответ
Рабочий лимит предметов на гуях есть в конфетных войнах близзардов, скопируйте от туда...
ответ
Name Legion:
меня не волнует уровень героя я хочу убрать этот предмет если их больше 2..уровень предмета то да..по другому я не вижу...вопрос в не в этом вопрос в том что увеличить а что убрать
пример взял отсюда
Item System
Events
Unit - A unit Acquires an item
Conditions
Actions
Set Item = 0
For each (Integer Slot_Integer) from 1 to 6, do (Actions)
Loop - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Item level of (Item carried by (Hero manipulating item) in slot Slot_Integer)) Equal to (Item level of (Item being manipulated))
Then - Actions
Set Item = (Item + 1)
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
Item Greater than 1
Then - Actions
Hero - Drop (Item being manipulated) from (Hero manipulating item)
Game - Display to (All players) for 5.00 seconds the text: Can't carry more th...
Else - Actions
решил вопрос....я проверял сколько предметов такого типа предмета и 2 убрал...написал так чтобы он понимал только этот тип предмета....теперь он правильно работает....надеюсь и другим этот триггер поможет в реализации..правда его надо доработать ну тем не менее
вот
тип переменной
ответ
Name Legion:
а почему именно любой? я же прописал какой предмет нужно удалить и с каким нужно работать
ну я так и делаю...только почему то он не понимает
яяяя не знаю в чем ошибка...и по другому сделал и так и сяк и никак..он все равно уничтожает предмет....мне нужно конкретно знать где он останавливается и решить этот вопрос...
может ошибка в других триггерах?..я так не думаю...он же по любому должен увидеть уровень... да даже если я уберу hero manipulating item и оставлю только кол-во предметов он все равно уничтожит...мне нужно только 2 уничтожить а не все предметы такого типа...черт его знает
да и так пробовал...уничтожает через раз предметы..1 подбирал остается 2 подобрал уничтожает 3 взял подбирается 4 уничтожается и так до бесконечности
и этот цикл убрал...from 1 to 6....тоже нет
может убрать эту огромную строчку и тупо уничтожить предмет из item caried by hero manipulating item of type?
решил вопрос...не хватало одно if all condition are true при условии что срабатывает ИНАЧЕ при первом подбирание предмета...ИНАЧЕ НЕ ТРОГАТЬ...а то условие срабатывало как ТО и ИНАЧЕ...не хотела проходить дальше вот и уничтожало предмет..обошлось малой кровью...я забыл что одно условие не может проверить что нужно если не прописать это
выкладываю мою систему систему...теперь она правильно работает...

23

» WarCraft 3 / лобби

Похожие вопросы:

ответ
карту выложите, вероятно поврежден файл war3map.j или в нем присутствует ошибка.
ответ
nvc123:
Bariy vad, бред
ZLOI_DED, джнгп сам выносит переменные в блок глобал
ZLOI_DED, короче скрины с ошибкой и строкой на которую ругается в студию
В том то и ананас, что никто ни на что не ругается. Он просто берёт и не запускается. А всё что я сказал выше - мои наблюдения в сравнении.
Ещё важное замечание. JassHelper на старой карте сам выдаёт ошибки. На новых - херушки... Что за аншлаг? o_0
100% проблема в JassHelper'е! Не у меня одного такая фигня. На хайвворкшопе есть подобные темы, но там он хотя бы запускается, а у меня даже не запускается.
А я ландом занимался... не хотелось бы карту с нуля переделывать... Может есть у кого какие идеи?
UPD: Решилось установкой новой версии JassHelper и пересохранением карты через Сохранить как...
ответ
quq_CCCP:
pegas42rus, плз линк на карту, мб я тебя не правильно понял?
Обычно играется рандомная музкальная тема когда ты находишся на канале или в лобби.
Если там какая то спецефическая музка, прошу ссылку на карту.
Да ненад, я уже нашел что нужно, это через конфиги делается, в них до загрузки мапы можно воспроизводить любую музыку
ответ
Проверяешь если слот не занят, потом удаляешь жителя.

23

» WarCraft 3 / Система заданий

Похожие вопросы:

ответ
GF RaiseD:
Нашёл систему, где звук передаётся в таймер, который истекает через 0 секунд. В результате один и тот же звук может проигрываться несколько раз без всяких проблем. В инетике пишут мол это такой баг движка.
ответ
Можно:
  • Создать проект, пройти модерацию и добавить в него ресурс с вакансией — он появится в ленте ресурсов.
  • Написать в свой блог, запись будет в ленте блогов, соответственно.
  • Обратиться сюда (но этот ресурс, вроде, не особо активен.
Но в «Вопросы» писать не надо.
ответ
Нестандартная арена.
ответ
Как хочешь
ответ
Если квест активен и не выполнен, а убитый - волк, то прибавляем 1 к переменной-счётчику для квеста. Если переменная равна 5, то засчитать выполнение квеста.

23

» WarCraft 3 / Уровень юнита

Похожие вопросы:

ответ
Nikita_Gamers, ну вот есть неплохая статья xgm.guru/p/wc3/movingsystem
ответ
Audes, как раз-таки ты ошибаешься.
Audes:
Это уже интереснее.
при касте проверяешь уровень скилла у кастера и заносишь в переменную[custom value цели] эту цифру. - Для баффов
для аур всё ещё веселее - либо через unit within range либо пиком всех юнитов в раиусе такм-то каждые 0.5 сек проверяешь у кого самый большой лвл способности, пикаешь всех союзных вокруг него и заносишь в переменную[custom value picked unit] эту цифру. Карта повиснет нахер и играть в неё будет невозможно.
ответ
Надо делать это с юнитом во время создания относительно уровня сложности. Если сложность *такая то* то создать юнита и сделать с ним *то-то* иначе, *другое то-то*
ответ
Если абуза боишься, можно просто поставить, что пассивка не действует чаще, например, раза в 0.5 секунды (таймером вешаешь на юнита "что-то" - абилу-маркер, хэш-значение и т. д., после окончания таймера убираешь, а в условиях - если у юнита это "что-то" есть, то пассивка не канает)

23

» WarCraft 3 / Стак способностей

Похожие вопросы:

ответ
Если охото сделать зарыды со счетчиком то тут 2 пути:
  1. Юзать стандартные абилки со счетчиком зарядов, а их только 2 совы охотницы и вспышки орудийного расчета гномов. Увы первая цель декор онли, вторая цель точка онли, на юнита никак, кстати хорошо подходит под кастом блинки, кастуется почти мгновенно, быстрее канала, без всяких рукомаханий.
  2. Использовать N способностей с разными иконками, на которых будет изображен счетчик, изменяя уровень способности или вовсе весть скилл через 'Eneg' (Техника, скилл механика, позволяет изменять поля скиллов) то можно создать скиллы со счетчиком, допустим пока есть заряды у скилла нету кулдауна, скилл последнего заряда имеет кулдаун.
Увы туча ипорта да и найти качественные иконки со счетчиком дело непростое.
ответ
У одной способности только одна иконка. Никак нельзя.
ответ
BaHeK, есть вроде
только чукча не читатель
Talgar2, есть 3 варианта
  1. давай абилки которые дают эффект со степенью двойки(например чтобы получить +12 надо дать абилки +8 и +4)
  2. используй баг с итемами
  3. используй мемхак
ответ
скорее всего, он говорит о SetUnitMovespeed ()
ответ
~16GB:
JackFastGame,
оно не работает, придётся делать много уровневую абилку во всеми вариантами скорости, и самом у подсчитывать её

23

» WarCraft 3 / Подскажите условие, пожалуйста

Похожие вопросы:

ответ
Включай триггеры по очереди, что тут сложного? Ох уж это новое new gen поколение мапмейкеров :(
ответ
вот стандартный набор функций мили игры в триггере инициализации:
    call MeleeStartingVisibility(  )
    call MeleeStartingHeroLimit(  )
    call MeleeGrantHeroItems(  )
    call MeleeStartingResources(  )
    call MeleeClearExcessUnits(  )
    call MeleeStartingUnits(  )
    call MeleeStartingAI(  )
    call MeleeInitVictoryDefeat(  )
По названиям функций думаю понятно что они делают, рассмотрим по подробнее MeleeInitVictoryDefea( )
function MeleeInitVictoryDefeat takes nothing returns nothing
    local trigger    trig
    local integer    index
    local player     indexPlayer

    // Create a timer window for the "finish soon" timeout period, it has no timer
    // because it is driven by real time (outside of the game state to avoid desyncs)
    set bj_finishSoonTimerDialog = CreateTimerDialog(null)

    // Set a trigger to fire when we receive a "finish soon" game event
    set trig = CreateTrigger()
    call TriggerRegisterGameEvent(trig, EVENT_GAME_TOURNAMENT_FINISH_SOON)
    call TriggerAddAction(trig, function MeleeTriggerTournamentFinishSoon)

    // Set a trigger to fire when we receive a "finish now" game event
    set trig = CreateTrigger()
    call TriggerRegisterGameEvent(trig, EVENT_GAME_TOURNAMENT_FINISH_NOW)
    call TriggerAddAction(trig, function MeleeTriggerTournamentFinishNow)

    // Set up each player's mortality code.
    set index = 0
    loop
        set indexPlayer = Player(index)

        // Make sure this player slot is playing.
        if (GetPlayerSlotState(indexPlayer) == PLAYER_SLOT_STATE_PLAYING) then
            set bj_meleeDefeated[index] = false
            set bj_meleeVictoried[index] = false

            // Create a timer and timer window in case the player is crippled.
            set bj_playerIsCrippled[index] = false
            set bj_playerIsExposed[index] = false
            set bj_crippledTimer[index] = CreateTimer()
            set bj_crippledTimerWindows[index] = CreateTimerDialog(bj_crippledTimer[index])
            call TimerDialogSetTitle(bj_crippledTimerWindows[index], MeleeGetCrippledTimerMessage(indexPlayer))

            // Set a trigger to fire whenever a building is cancelled for this player.
            set trig = CreateTrigger()
            call TriggerRegisterPlayerUnitEvent(trig, indexPlayer, EVENT_PLAYER_UNIT_CONSTRUCT_CANCEL, null)
            call TriggerAddAction(trig, function MeleeTriggerActionConstructCancel)

            // Set a trigger to fire whenever a unit dies for this player.
            set trig = CreateTrigger()
            call TriggerRegisterPlayerUnitEvent(trig, indexPlayer, EVENT_PLAYER_UNIT_DEATH, null)
            call TriggerAddAction(trig, function MeleeTriggerActionUnitDeath)

            // Set a trigger to fire whenever a unit begins construction for this player
            set trig = CreateTrigger()
            call TriggerRegisterPlayerUnitEvent(trig, indexPlayer, EVENT_PLAYER_UNIT_CONSTRUCT_START, null)
            call TriggerAddAction(trig, function MeleeTriggerActionUnitConstructionStart)

            // Set a trigger to fire whenever this player defeats-out
            set trig = CreateTrigger()
            call TriggerRegisterPlayerEvent(trig, indexPlayer, EVENT_PLAYER_DEFEAT)
            call TriggerAddAction(trig, function MeleeTriggerActionPlayerDefeated)

            // Set a trigger to fire whenever this player leaves
            set trig = CreateTrigger()
            call TriggerRegisterPlayerEvent(trig, indexPlayer, EVENT_PLAYER_LEAVE)
            call TriggerAddAction(trig, function MeleeTriggerActionPlayerLeft)

            // Set a trigger to fire whenever this player changes his/her alliances.
            set trig = CreateTrigger()
            call TriggerRegisterPlayerAllianceChange(trig, indexPlayer, ALLIANCE_PASSIVE)
            call TriggerRegisterPlayerStateEvent(trig, indexPlayer, PLAYER_STATE_ALLIED_VICTORY, EQUAL, 1)
            call TriggerAddAction(trig, function MeleeTriggerActionAllianceChange)
        else
            set bj_meleeDefeated[index] = true
            set bj_meleeVictoried[index] = false

            // Handle leave events for observers
            if (IsPlayerObserver(indexPlayer)) then
                // Set a trigger to fire whenever this player leaves
                set trig = CreateTrigger()
                call TriggerRegisterPlayerEvent(trig, indexPlayer, EVENT_PLAYER_LEAVE)
                call TriggerAddAction(trig, function MeleeTriggerActionPlayerLeft)
            endif
        endif

        set index = index + 1
        exitwhen index == bj_MAX_PLAYERS
    endloop

    // Test for victory / defeat at startup, in case the user has already won / lost.
    // Allow for a short time to pass first, so that the map can finish loading.
    call TimerStart(CreateTimer(), 2.0, false, function MeleeTriggerActionAllianceChange)
endfunction
Вроде много, но тут все просто, создается три триггера один следит за тем сколько построил зданий любой играющий игрок, второй следит сколько зданий погибло у любого играющего игрока, ну а третий следит за теми кто ливнул, чтобы их не преребирать, два прочих вспомогательные, следят за отмненой строительства и прочее.
Итого делаем вывод, чтобы узнать проиграл или нет игрок, нам нужно узнать сколько у него живых зданий, меньше 1 игрок проиграл. А реализовать это можно как угодно, триггерами следящими за смертями и прочим или таймером, который будет переодически считать все здания каждого игрока и давать поражение тем игрокам у кого не осталось ни одного здания...
ответ
Что за идиотия? Блин всех крипов что ты создал - заносишь в группу спецально созданную для подсчета юнитов.
Делаешь триггер с событием - юнит игрока N (нужный тебе игрок) умирает, условие умерший юнит есть в группе для подсчета юнитов.
Действие - удалить юнита из группы, удалить труп (желательно, то просадки фпс в 2017 вам не простят)
Второй триггер раз в 3 сек. смотрит число юнитов в групее, если число меньше 1, то триггер отключается, и запускается таймер на новую волну, когда таймер истечет и начнется спаун, крипов, переодический триггер счетсчик снова включается.
Примитивный как счеты алгоритм.
ответ
Блин - видел очень давно похожую реализацию, но походу 100500 людей так и не научились это делать, написать чтоли самому...
Суть - для продажи предметов, войск, всяких древ талантов - используйте спеллбук + способности на основе - поставка ресурсов.
Помещаем в спеллбук до 11 способностей на основе "Поставка ресусов" - это аналог канала, настраивается приказ и прочее, но самое главное есть поля - стоймость золотом, стоймость деревом, т.е эта абилка может требовать не только ману но и золото с деревом. Так же там стоит вкладка, заряд игрока владельца - очень важная настройка:
  1. Заряд игрока владельца включен - тогда за каст ресурсы будут списыватся только у игрока владельца юнита, при этом неважно что вашим юнитом управляет другой игрок.
  2. Заряд игрока владельца выключен - тогда при касте этой абилки ресурсы будут списыватся со счета игрока, который и отдал приказ, это даже можно отследить, но немного геморойно:
Суть: делаем триггер который срабатывает на приказ каста поставки ресурсов, или события юнит начинает каст способности, условия по вкусу и действия - создать еще 1 триггер, в события которого добавить - ресурсы игрока N изменились (для каждого игрока способного купить), условием - ресурсов стало меньше на стоймость каста абилки, и действие - выключить триггер, записать GetTriggerPlayer() в глобальную переменную или в еще куда, это и будет наш игрок который кликнул на поставку ресурсов, ну и далее утилизируем триггер, удаляя действия. Можно написать все действия в условии, тогда не придется удалять действия.
Так можно отследить кто кастанул абилку поставки ресурсов если юнитом управляют несколько игроков.
ответ
У тролля просто морф в другого тролля.
Вообще триггерно можно сделать так, чтобы изучалась невидимая пустышка (на основе какой-нибудь предметной пассивки с нулевыми значениями сделать геройскую абилу), а потом в зависимости от условий давать одну или другую активку и задавать ее лвл по лвлу той пассивки.
Только лучше еще эти активки спрелоадить (дать чему-то изначально на карте), чтобы лага при их первом добавлении не было.

23

» WarCraft 3 / Проблемы с физическим размером

Похожие вопросы:

ответ
koloff:
Объявляются переменные в начале.
local lightning l
call AddLightningEx(codeName, true, GetLocationX(where1), GetLocationY(where1), GetLocationZ(where1), GetLocationX(where2), GetLocationY(where2), GetLocationZ(where2))
set l = bj_lastCreatedLightning

23

» WarCraft 3 / Бонусная атака

Похожие вопросы:

ответ
Возможно, по средству скрещивания через триггер, видел в близовской карте Хеллоуин! Это что то типо ДОТЫ, только от близзард, есть по умолчанию в любом варике, старше версии 1.18. Легко открывается, триггер можно перезалить в свою карту.
ответ
Вот небольшая наработока (не уверен в работоспособности, надо еще проверить), использующая хак с чтением памяти:
function GetUnitDamage takes unit u returns integer
	local integer p = Memory[ConvertHandle(u) / 4 + 0x7A] / 4
	local integer sides1 = Memory[p + 0x25]
	local integer dice1 = Memory[p + 0x22]
	local integer base = Memory[p + 0x28]
	local integer bonus = Memory[p + 0x2C]
	//call BJDebugMsg("DMG: " + I2S(base + dice1) + " - " + I2S(base + sides1 * dice1) + " + " + I2S(bonus))
	return base + dice1
endfunction
ответ
not_name:
я карту посмотрел, да, пытался сделать похожее
только там с очередью приказов шляпа выходит, поэтому я лучше сделаю все визуально

в общем, реализовал, как и говорил выше - при смерти сразу воскрешаю героя на месте гибели, пауза, анимация, таймер, по прошествии таймера - выдаю все нужное, при повторной смерти - забираю
адекватно работает с крестами

23

» WarCraft 3 / не отображается моделька в игре

Похожие вопросы:

ответ
Для каждого дерева нужны три модели: обычная, неактивная (с названием Doodads\Terrain\AshenTree\AshenTree0S.mdx, например) и неактивная разрушенная (Doodads\Terrain\AshenTree\AshenTree0D.mdx). У неактивных моделей должна быть только одна анимация — Stand. У первой — только деревце, у второй — только пенёк, соответственно.
Когда с деревом никто не взаимодействует, отображаются неактивные модели. Ты их не заменил, потому такая вот фигня.
Как сделать полноценно работающие деревья с моделями, не заменяющими стандартные, я не знаю. Возможно, никак.
ответ
В jass new gen pack'е они добавляются в список "файл модели".

23

» WarCraft 3 / Сопротивление

Похожие вопросы:

ответ
Даешь благословление элуны или рунные браслеты
ответ
Можно дать способность-пустышку, или использовать "благословение Элуны".
ответ
EvilPenguin:
Может я что-то не так делаю но когда я ставлю в маг уроне отрицательное значение он вообще перестает наносится. Какую графу и как изменять не подскажите?
а не надо ставить отрицательное значение
1.00 это 100% урона (норма)
0.80 это 80% урона (на 20% ниже нормы)
1.40 это 140% урона (на 40% больше норма)
ответ
Как вариант, можно найти в системе действия, в которых триггерно наносится урон юниту (потеря жизней), и отлавливать уже оттуда.
ответ
Какая еще формула? Это математика начальных классов. 25*50/100 = 12.5.
Ты проверяешь можешь как до срабатывания прока, так и после и от этого менять структуру. Вероятность во всех случаях 12.5%.

23

» WarCraft 3 / Как изменить максимальную и максимальную атаку героя?

Похожие вопросы:

ответ
  1. Через txt команды заменить атаку на патруль, либо скрыть через мемхак, или делать юнит нетральный и дать ему канал приказа и будет иметь 12 способностей это смотря как вам удобно!
  2. Если способности на прямую героя то можете настраивать порядок, а если через спелбук то нужно прелоад делать

23

» WarCraft 3 / Модель не открывается в редакторе варкрафта

Похожие вопросы:

ответ
У модельки нет анимации смерти - удаляй юнит- Боевая единица А unit dies(умирает) - remove dying unit from the game
ответ
тему можно закрывать. ответ сам нашел.
ответ
вот, выбирается
так как там нет геометрии (а только источники частиц), то так просто в один клик не рассчитываются границы
надо вручную создавать объект "форма" с нужным радиусом и координатами, в редакторе узлов model editor'а
ответ
нет, birth не вшита в stand...
автор просто немного накосячил с анимацией видимости...
держи...
на этот раз бесплатно и без смс..)
ответ
GRESHNIK1, ошибку вызывает каждая из 3 моделей?
или лишь 1 из них?
ну а вообще критует из за того что модель кривая
либо брось это дело либо сконверти их в mdl и правь через блокнот

23

» WarCraft 3 / Анимации в mdlvis

Похожие вопросы:

ответ
Tiodor, стоп, как это по тем же точкам? При изменении положения базовой кости, разве присоединённые к ней остальные не должны меняться? В-общем не могу я исправить)) Эта модель должна заменять архивную... К какой-либо карте она не относится. Так-то =(

После усердного копания архивов игры и парочки тестов, нашёл для себя выход) В War3Patch.mpq/Units/UnitUI.slk хранились нужные мне данные. Ранее подобных проблем не было (о почему же!), поэтому и не пытался издеваться над игрой)
ответ
Я,конечно,вообще ничего не понимаю в создании моделей,но всё таки попытаюсь помочь.
Сколько раз ты пытался вычислить проблему?Скорее всего она заключается в самом элементарном месте,в котором ты полностью уверен.Перепроверь ещё раз всё и максимально подробно.В триггерах ошибки чаще всего получаются именно по причине уверенности в том,что их нет и быть не может.И желательно скинь модель этой крестьянки,чтобы опытные 3D-дизайнеры смогли проверить её и назвать все ошибки и недочёты.
ответ
Редактор анимаций - скелет - прикрепить выделенные вершины к кости Head.
А лучше статьи почитай по мдлвизу.
А ещё лучше - сам попытайся разобраться.
ответ
Shift + левая кнопка мышки по полосе анимации, выделяешь нужный отрезок, копируешь.

23

» WarCraft 3 / Триггерный АОЕ урон

Похожие вопросы:

ответ
Полагаю, действия "группа игроков" - лишние. Просто пикай юнитов. И не в регионе, а в радиусе. Там должно быть действие "пикнуть юнитов в радиусе, которые соответствуют каким-то условиям". Вот в matching condition и проверяй "правильность" юнита.
ответ
Физический - тип атаки: какой надо(например осадный), тип урона: обычный - изменяется физической защитой.
Магический - тип атаки: заклинание, тип урона: магия - изменяется магической защитой.
Смешанный - тип атаки: заклинание, тип урона: обычный - изменяются обеими защитами
чистый -тип атаки: сила тьмы, тип урона: универсальный - не снижается защитой
Источники магической защиты - константы урона, благославение элуны(складывающиеся), рунные браслеты(нескладывающиеся, если добавлены последними).
Источники физической защиты - ... просто смотри на пункт защита у юнита.
ответ
Наименее ресурсозатратным для игрового процесса будет кастовать саму волну через отдельного дамми, который создаётся специально и только для волны силы. Сама волна наносит 1 ед урона. И потом определив, тип юнит-источника урона - наносим нужный урон от лица героя-хозяина юнита "волна силы".
В варианте "чекать группы каждые 0.0х сек" будет засоряться память и скорее всего будут подлагивания, в варианте со спец-дамиками засорится РО, выбирай из двух зол.
ответ
Вот эта статья.
ответ
Astra, очень багано
так как после последней атаки может многое изменится
так же урон при событие юнит получает урон зависит от брони и прочих резистов
если юнит с уроном 100 нанёс удар по врагу с физ резистом 50% а потом получил бафф/предмет на +100 урона то скилом нанесёт 50 урона хотя должен был бы нанести 200
тут нужно юзать бд
при касте скила брать из бд начальный урон юнита, бонусы предметов и бонусы всех бафов
тема кстати уже много раз поднималась
и каждый раз все заканчивалось тем что афтар забивал на подобную систему либо писал "вы все нубы/тролли и не знаете/не хотите сказать как сделать это легко и просто"
ибо подобная система требует кучи кода и как минимум 30 прочтённых статей по jass
вот статья о бд

23

» WarCraft 3 / Триггеры

Похожие вопросы:

ответ
Вам сюда, господин хороший. Там есть ответы, практически, на все ваши вопросы.
ответ
спасибо, XGM Bot!
Нашел это - xgm.guru/p/blog-nvc123/ur1-3
ответ
Собственные попытки в студию, что не получается?
Напомним - ЭТО НЕ СТОЛ ЗАКАЗОВ, здесь задают вопросы про реализацию тех или иных вопросов, спрашивают про ошибки, оптмизацию, отдельные функции. Я не увидел в вашем вопросе ничего кроме невнятного описания механики способности, " вокргу кого то там огненные столбы возникают, и еще порча"...
ответ
Filius Dei, во вредные советы подъехали...
Русификатор очень поможет тем кто собрался ломануть чужую карту и сделать её мод, прям ваще жир...
Потом нубам вроде сударя не стоит бежать ломать чужую карту, чето там пытатся копировать - это все бесполезно, недавно был похожий вопрос - помогите взломать карту за вознаграждение, карту сломали - ну а дальше что? Он неспособен ничего сделать потому что просто не понимает как?
Играя в некую карту вы мните себя великими балансерами и картоделами, мол да чё там, шяс подправлю пару значений и все будет норм - нет не будет, это не так просто как может показаться, без понимания устройства карты и знания Jass вам нечего там делать, вы тупо ничего не сможете изменить, да даже скопировать и вставить!
Помните что без труда не выловишь и рыбку из пруда, т.е изи способов в 1 кнопку взять и запилить чужую карту так как вам хочется или вдруг стащить всех героев себе в карту нет, а уж теболее не случится так что вам кто то возьмет и все это сделает вам за спасибо...